#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;

struct BigInt {
	vector<char> num;
	void operator=(const int& a1) {
		int a=a1;
		num.clear();
		while (a) {
			num.push_back(a%10);
			a/=10;
		}
	}
	void operator=(const BigInt& a) {
		int len=a.num.size();
		num.clear();
		for (int i=0; i<len; ++i) num.push_back(a.num[i]);
	}
	BigInt(int a) {
		*this=a;
	}
	BigInt() {
	} 
	~BigInt() {
		num.clear();
	}
};

BigInt operator * (const BigInt& t, const int& a1) {
	ll a=a1;
	ll tmp=0;
	vector<char> res;
	vector<char> num=t.num;
	int len=num.size();
	for (int i=0; i<len; ++i) {
		res.push_back((a*num[i]+tmp)%10);
		tmp=(a*num[i]+tmp)/10;
	}
	while (tmp) {
		res.push_back(tmp%10);
		tmp/=10;
	}
	BigInt zz;
	zz.num=res;
	res.clear();
	num.clear();
	return zz;
}
BigInt operator + (const BigInt& a, const BigInt& b) {
	vector<char> num1=a.num, num2=b.num,res;
	ll tmp=0;
	int len=max(num1.size(), num2.size());
	int len1=num1.size(), len2=num2.size();
	ll sum;
	for (int i=0; i<len; ++i) {
		sum=0;
		if (i<len1) sum+=num1[i];
		if (i<len2) sum+=num2[i];
		sum+=tmp;
		res.push_back(sum%10);
		tmp=sum/10;
	}
	while (tmp) {
		res.push_back(tmp%10);
		tmp/=10;
	}
	BigInt c;
	c.num=res;
	num1.clear(); num2.clear(); res.clear();
	return c;
}
BigInt &operator+=(BigInt& a, const BigInt& b) {
	a=(a+b);
	return a;
}
bool operator==(const BigInt& a, const BigInt& b) {
	int len1=a.num.size(), len2=b.num.size();
	if (len1!=len2) return false;
	for (int i=0; i<len1; ++i) {
		if (a.num[i]!=b.num[i]) return false;
	}
	return true;
}
std::ostream &operator<< (std::ostream& out, const BigInt& a) {
	int len=a.num.size();
	for (int i=len-1; i>=0; --i) out<<(char)(a.num[i]+'0');
	return out;
}
int main() {
	ll a,b,c;
	BigInt a1,b1,c1;
	while (std::cin>>a>>b>>c) {
		a1=a; b1=b; c1=c;
		if (c1==(a1+b1)) {
			std::cout<<"YES"<<std::endl;
		}
		else std::cout<<"NO"<<std::endl;
	}
	return 0;
}
